#ifndef SKYNET_SERVER_H
#define SKYNET_SERVER_H

#include <stdint.h>
#include <stdlib.h>

struct skynet_context;
struct skynet_message;
struct skynet_monitor;

struct skynet_context *skynet_context_new(const char *name, const char *parm);
void skynet_context_grab(struct skynet_context *);
void skynet_context_reserve(struct skynet_context *ctx);
struct skynet_context *skynet_context_release(struct skynet_context *);
uint32_t skynet_context_handle(struct skynet_context *);
int skynet_context_push(uint32_t handle, struct skynet_message *message);
void skynet_context_send(struct skynet_context *context, void *msg, size_t sz,
                         uint32_t source, int type, int session);
int skynet_context_newsession(struct skynet_context *);
struct message_queue *skynet_context_message_dispatch(struct skynet_monitor *,
                                                      struct message_queue *,
                                                      int weight);
int skynet_context_total();
void skynet_context_dispatchall(struct skynet_context *context);

void skynet_context_endless(uint32_t handle);

void skynet_globalinit(void);
void skynet_globalexit(void);
void skynet_initthread(int m);

void skynet_profile_enable(int enable);

#endif
